// 导入 FingerprintJS
import FingerprintJS from '@fingerprintjs/fingerprintjs';
// 生成UUID
const UUID = () => {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = Math.random() * 16 | 0;
    const v = c === 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
  });
}



// 存储指纹识别器实例和指纹结果
let fpInstance = null;
let fingerprintResult = null;

/**
 * 自动初始化并获取浏览器指纹
 * 首次调用会初始化实例并获取指纹，后续调用直接返回缓存结果
 * @param {Object} options - 配置选项
 * @param {boolean} forceRefresh - 是否强制刷新指纹（默认false）
 * @returns {Promise<Object>} 指纹信息对象
 */
export const getFingerPrint = async (options = {}, forceRefresh = false) => {
  try {
    // 如果需要强制刷新或还没有结果，则重新获取
    if (forceRefresh || !fingerprintResult) {
      // 初始化实例（如果尚未初始化）
      if (!fpInstance) {
        const defaultOptions = {
          monitoring: false,
          ...options
        };
        fpInstance = await FingerprintJS.load(defaultOptions);
      }
      
      // 获取指纹信息
      fingerprintResult = await fpInstance.get();
    }
    // 返回指纹结果
    return fingerprintResult?.visitorId;
  } catch (error) {
    console.error('获取指纹信息失败，降级成UUID', error);
    return UUID();
  }
};
